/*

cimahis - Software para el analisis de imagenes de corte histologico

Copyright (C) Andrés De Abreu 2010 <jadabreu @ gmail . com>


Este programa es software libre. Puede redistribuirlo y/o modificarlo bajo los términos
de la Licencia Pública General de GNU según es publicada por la Free Software Foundation,
bien de la versión 2 de dicha Licencia o bien (según su elección) de cualquier versión
posterior.

Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA,
incluso sin la garantía MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
PROPÓSITO PARTICULAR. Véase la Licencia Pública General de GNU para más detalles.

Debería haber recibido una copia de la Licencia Pública General junto con este programa.
Si no ha sido así, escriba a la Free Software Foundation, Inc.,
en 675 Mass Ave, Cambridge, MA 02139, EEUU.

    //ACERCA DE histograma.h
    *
    * Declaracion de la clase histograma y de las subclases histogramaTinte
    * e histogramaEstandar.
    *

*/


#ifndef HISTOGRAMA_H
#define HISTOGRAMA_H

#include <opencv/cv.h>


class histograma  // clase abstracta
{
	
        protected:

                CvHistogram *hist;  //apuntador al histograma
                int nBarras, nValores,umbralOptimo;  // variables para almacenar numero de barras que tendra el histograma, numero de valores que contiene y valor de umbral optimo
                float media,varianza;


        public:

                //metodos virtuales que deben ser definidas posteriormente cuando se implementen las clases concretas
                
                virtual void calcularHist(IplImage *img)=0;
                virtual IplImage * dibujarHist()=0;

                //metodos concretos de la clase
                IplImage * dibujarGrupo(histograma * hist2, histograma * hist3);
                float obtenerMedia();
                float obtenerMediana();
                int obtenerModa();
                float obtenerDesvEstandar();
                int obtenerRango();
                float calcularSesgo(float estimador);
                float obtenerVarianza();
                int obtenerUmbralOptimo();
                CvHistogram  * pasarApuntador();
                


};

class histogramaTinte : public histograma 
//Clase HistogramaTinte creada para trabajar histogramas de Tinte de 360 valores,
// hereda de la clase abstracta Histograma
{
        public:

                //definicion de los metodos
                histogramaTinte();
                void calcularHist(IplImage *img);
                IplImage * dibujarHist();
};

class histogramaEstandar : public histograma
//Clase HistogramaEstandar creada para trabajar histogramas estandar de 255 valores,
// hereda de la clase abstracta Histograma
{
        public:

                //definicion de los metodos
                histogramaEstandar();
                void calcularHist(IplImage *img);
                IplImage * dibujarHist();
};
#endif // HISTOGRAMA_H
